<?php

/**
 * 平治门禁API服务类
 * User: wujun
 * Date: 2017/7/12
 * Time: 19:09
 */
namespace Task\App\Doorbjhq;

class DoorctrlBjhqApi
{
    protected static $_APIURL;
    const WEBSERVICE_NAMESPACE = 'http://tempuri.org/';

    /**
     * 访问接口的通用方法
     * @param string $functionName 方法名称
     * @param array $params 参数名,数组形式传输
     * @return array 返回数组
     */
    public static function callApi($functionName,$params)
    {
        // api请求地址
        self::$_APIURL = config('PZ_API_ADDR');

        //另外，允许引用外部xml实体
        libxml_disable_entity_loader(false);

        try {

            //采用SOAP方式来进行访问的webService
            $webService= new \SoapClient(self::$_APIURL);
            $returnObj = $webService->__soapCall($functionName, self::_formatReqParams($functionName,$params));

            $result = $functionName.'Result';
            return json_decode($returnObj->$result, true);

        } catch (\Exception $e) {

            $errMsg = 'call api error,the error_code:'.$e->getCode().' the error_msg:'.$e->getMessage();
            wLog($errMsg,'Api');

            return array('ErrorCode'=>$e->getCode(), 'Message'=>'调用接口失败', 'Success' => false);
        }
    }

    /**
     * 格式化请求参数
     * @param array $params 请求参数
     * 带json格式的参数：
     * $params = array(
    'timeParam' => array(
    'beginTime' => '2017-07-04 00:00:00',
    'endTime' => '2017-07-07 23:59:59'
    ),
    );
     * 非json格式的参数
     * $params = array(
    'outID' => 11111,
    );
     * @return array
     */
    private static function _formatReqParams($functionName,$params)
    {
        $newData = array();
        if (in_array($functionName, config('NOT_JSON_METHOD_LIST'))) {  //如果是非json格式方法请求
            foreach ($params as $key => $param) {
                if ( is_array($param) ) {   //如果是非json格式的参数
                    throwException('接口参数不能是JSON格式', 10000);
                }
                $newData[$key] = $param;
            }
        } else {  //json格式方法请求
            foreach ($params as $key => $param) {
                if ( !is_array($param) ) {  //如果是JSON格式的参数，必须是数组，且是二维数组格式
                    $param = array($param);
                }
                $newData[$key] = json_encode($param);
            }
        }
        return array($newData);
    }

}